package part9;

/**
 * @author wcj
 * @Date 2021/5/17 16:45
 * @Version 1.0
 */
public class Part92 {
    public static void main(String[] args) {
        Instrument[] arr = {
                new Winds(),
                new WoodWinds(),
                new Brasses(),
        };
        tuneAll(arr);
    }

    public static void tune(Instrument i) {
        i.play(Voice.LARGE);
    }

    public static void tuneAll(Instrument[] i) {
        for (Instrument instrument : i) {
            tune(instrument);
        }
    }
}

enum Voice {
    /**
     * MIDDLE
     */
    MIDDLE,
    /**
     * LARGE
     */
    LARGE,
    /**
     * LARGER
     */
    LARGER,
}

/**
 * 接口使用interface关键字进行修饰，是更加完全的抽象类
 * 接口中只有常量没有变量，且默认使用public static final修饰
 * 接口中的方法都是抽象方法，默认使用public修饰
 */
interface Instrument {
    int VALUE = 5;

    /**
     * play
     *
     * @param v
     */
    void play(Voice v);

    /**
     * adjust
     */
    void adjust();
}

class Winds implements Instrument {

    @Override
    public void play(Voice v) {
        System.out.println("Winds play:" + v);
    }

    @Override
    public void adjust() {

    }
}

class Brasses implements Instrument {

    @Override
    public void play(Voice v) {
        System.out.println("Brasses play:" + v);
    }

    @Override
    public void adjust() {

    }
}

class WoodWinds extends Winds {
    @Override
    public void play(Voice v) {
        System.out.println("WoodWinds play:" + v);
    }

    @Override
    public void adjust() {
    }
}